import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

# 尝试打开图片
face = Image.open('face.png')
im = np.array(face)
# 打印数组信息
print(f"数组类型: {type(im)}")       # 输出数组类型，应为 numpy.ndarray
print(f"数据类型: {im.dtype}")       # 输出数据类型，通常是 uint8
print(f"图片尺寸(高, 宽, 通道): {im.shape}")  # 输出图片尺寸

# 提取红色通道（仅保留红色，绿、蓝通道置 0 ）
im_red = im.copy()  # 复制原数组，避免修改原图
im_red[:, :, 1] = 0  # 绿色通道置 0
im_red[:, :, 2] = 0  # 蓝色通道置 0

# 显示原图和处理后的图
plt.figure(figsize=(10, 5))  # 设置画布大小，方便对比

# 显示原图
plt.subplot(1, 2, 1)  # 1 行 2 列，第 1 个子图
plt.imshow(im)
plt.title("原图")
plt.axis("off")  # 隐藏坐标轴

# 显示红色通道图
plt.subplot(1, 2, 2)  # 1 行 2 列，第 2 个子图
plt.imshow(im_red)
plt.title("红色通道图")
plt.axis("off")  # 隐藏坐标轴

plt.tight_layout()  # 自动调整布局，避免标签重叠
plt.show()

# 保存处理后的红色通道图片到当前运行目录。
save_filename = "numpy_red.png"
Image.fromarray(im_red).save(save_filename)
print(f"红色通道图片已保存为: {save_filename}")


#灰度图片
# 转换为灰度图（'L'模式表示8位灰度图）
im_gray = np.array(face.convert('L'))  # 灰度图数组（ shape 为 (高, 宽)）
# 打印灰度图数组信息
print(type(im_gray))    # <class 'numpy.ndarray'>
print(im_gray.dtype)    # uint8
print(im_gray.shape)    # (768, 1024) （示例尺寸）

# 展示灰度图（使用gray colormap更符合人眼对灰度的感知）
plt.figure()
plt.imshow(im_gray, cmap='gray')  # 不加cmap可能显示为伪彩色
plt.title('灰度图')
plt.axis('off')  # 隐藏坐标轴
plt.show()